package com.nicolas.pattern.prototype;

import java.io.Serializable;

/**
 * 在深克隆中，无论原型对象的成员变量是值类型还是引用类型，都将复制一份给克隆对象，
 * 深克隆将原型对象的所有引用对象也复制一份给克隆对象。
 * 简单来说，在深克隆中，除了对象本身被复制外，对象所包含的所有成员变量也将复制
 * 
 * 在Java语言中，如果需要实现深克隆，可以通过序列化(Serialization)等方式来实现。
 * 序列化就是将对象写到流的过程，写到流中的对象是原有对象的一个拷贝，而原对象仍然存在于内存中。
 * 通过序列化实现的拷贝不仅可以复制对象本身，而且可以复制其引用的成员对象，
 * 因此通过序列化将对象写到一个流中，再从流里将其读出来，可以实现深克隆。
 * 需要注意的是能够实现序列化的对象其类必须实现Serializable接口，否则无法实现序列化操作。下
 * 面我们使用深克隆技术来实现工作周报和附件对象的复制，由于要将附件对象和工作周报对象都写入流中，
 * 因此两个类均需要实现Serializable接口
 * @author nicolas  2017年2月11日 -- 下午8:21:58
 * 附件类
 */
public class AttachmentDeep  implements Serializable{
	 private  String name; //附件名
	   public  void setName(String name)
	   {
	          this.name  = name;
	   }
	   public  String getName()
	   {
	          return  this.name;
	   }
	 public void download()
	 {
	        System.out.println("下载附件，文件名为" + name);
	 }
}
